package chapter04

import scala.util.control.Breaks._

/**
  * 9.循环的中断
  * Scala内置控制结构特地去掉了break和continue，
  * 是为了更好的适应函数化编程，推荐使用函数式的风格解决break和contine的功能，而不是一个关键字
  */
object Test06_Break {

  def main(args: Array[String]): Unit = {
    //1.采用抛出异常方式退出循环
    try {
      for (i <- 1 until 10) {
        if (i > 3) {
          throw new RuntimeException

        }
        println(i)
      }
    } catch {
      case e: Exception => //nothing to do ,just quit
    }
    println("这是循环外的代码")

    //2.使用Scala中Breaks类中break函数,实现异常的抛出和捕捉
    //说明
    //import scala.util.control.Breaks._
    //1. breakable 是一个高阶函数：可以接收函数的函数就是高阶函数（后面详解）
    // (1) op: => Unit 表示接收的参数是一个没有输入，也没有返回值的函数
    // (2) 即可以简单理解可以接收一段代码块
    // 3. breakable 对break()抛出的异常做了处理,代码就继续执行
    // 4. 当我们传入的是代码块，scala程序会将() 改成{}
    //如何实现continue的效果?Scala内置控制结构特地也去掉了continue，是为了更好的适应函数化编程，可以
    //使用if – else 或是循环守卫实现continue的效果。
    breakable(
      for (i <- 1 until 10) {
        if (i > 3) {
          break()
        }
        println(i)
      }
    )
    println("这是循环外的代码")
  }

}
